//using System;
//using System.Threading;
//using System.Threading.Tasks;
//using UnityEngine;
//using UnityEngine.UI;

//namespace UnityX.WeiXin
//{
//    [RequireComponent(typeof(RawImage))]
//    public class QrcodeLogin : MonoBehaviour
//    {
//        public event Action<string> onLogin;

//        public string appID;
//        public string redirectUri;
//        public string state;

//        private RawImage 二维码图片;
//        private Text 二维码状态文本;

//        private CancellationTokenSource cancellationTokenSource;

//        private void Awake()
//        {
//            二维码图片 = GetComponent<RawImage>();
//        }
//        private void OnEnable()
//        {
//            二维码状态文本.text = "";

//            cancellationTokenSource = new CancellationTokenSource();
//            WinXinQrcode(cancellationTokenSource.Token);
//        }
//        private void OnDisable()
//        {
//            if (cancellationTokenSource != null)
//            {
//                cancellationTokenSource.Cancel();
//                cancellationTokenSource.Dispose();
//                cancellationTokenSource = null;
//            }
//        }
//        public void Open(string appID, string redirectUri, string state)
//        {
//        }
//        public void Stop()
//        {
//            StopAllCoroutines();
//        }
//        private async void WinXinQrcode(CancellationToken cancellationToken)
//        {
//            while (!cancellationToken.IsCancellationRequested)
//            {
//                QrcodeData qrcodeData = await WeiXin.GetLoginQrcode(appID, redirectUri, state);
//                if (qrcodeData == null)
//                {
//                    await Task.Delay(1000, cancellationToken);
//                    continue;
//                }

//                Texture2D t = new Texture2D(8, 8);
//                t.LoadImage(qrcodeData.img);
//                Color[] cs = t.GetPixels();
//                for (int i = 0; i < cs.Length; i++)
//                {
//                    float v = 1 - cs[i].r;
//                    cs[i] = new Color(v, v, v, v);
//                }
//                Destroy(t);
//                Texture2D qrcodeTexture2D = new Texture2D(t.width, t.height);
//                qrcodeTexture2D.SetPixels(cs);
//                qrcodeTexture2D.Apply();
//                二维码图片.texture = qrcodeTexture2D;
//                二维码图片.CrossFadeColor(new Color(1.0f, 1.0f, 1.0f, 1.0f), 0, true, true);
//                二维码状态文本.text = "";
//                await WinXinQrcodeStatus(qrcodeData.uuid, cancellationToken);
//            }
//        }
//        private async Task WinXinQrcodeStatus(string uuid, CancellationToken cancellationToken)
//        {
//            while (!cancellationToken.IsCancellationRequested)
//            {
//                QrcodeStatusData qrcodeStatusData = await WeiXin.GetLoginQrcodeStatus(uuid);
//                if (qrcodeStatusData == null)
//                {
//                    await Task.Delay(1000, cancellationToken);
//                    continue;
//                }
//                if (cancellationToken.IsCancellationRequested)
//                {
//                    return;
//                }
//                switch (qrcodeStatusData.status)
//                {
//                    case QrcodeStatus.未知:
//                        break;
//                    case QrcodeStatus.已经准备:
//                        二维码状态文本.text = "";
//                        二维码图片.CrossFadeColor(new Color(1.0f, 1.0f, 1.0f, 1.0f), 0, true, true);
//                        break;
//                    case QrcodeStatus.已经扫描:
//                        二维码状态文本.text = "已经扫码";
//                        二维码图片.CrossFadeColor(new Color(0.5f, 0.5f, 0.5f, 1.0f), 0, true, true);
//                        break;
//                    case QrcodeStatus.扫描并登录:
//                        二维码状态文本.text = "登录中";
//                        二维码图片.CrossFadeColor(new Color(0.5f, 0.5f, 0.5f, 1.0f), 0, true, true);
//                        onLogin?.Invoke(qrcodeStatusData.code);
//                        return;
//                    case QrcodeStatus.扫描后取消:
//                        二维码状态文本.text = "扫描后取消";
//                        二维码图片.CrossFadeColor(new Color(0.5f, 0.5f, 0.5f, 1.0f), 0, true, true);
//                        return;
//                    case QrcodeStatus.二维码过期:
//                        二维码状态文本.text = "二维码过期";
//                        二维码图片.CrossFadeColor(new Color(0.5f, 0.5f, 0.5f, 1.0f), 0, true, true);
//                        return;
//                    case QrcodeStatus.调用太频繁:
//                        break;
//                    default:
//                        break;
//                }
//                await Task.Delay(1000, cancellationToken);
//            }
//        }
//    }
//}